from functools import wraps
#from flask import jsonify
from backend.utils import api_response
from flask_jwt_extended import verify_jwt_in_request, get_jwt


def admin_required(fn):
    """检查JWT中是否存在 'role'声明且值为'admin'"""
    @wraps(fn)
    def wrapper(*args, **kwargs):
        # 确保JWT有效。如果 @jwt_required 在前面，这步可省略但无害。
        try:
            verify_jwt_in_request(locations=['cookies', 'headers']) # 明确指定位置
            claims = get_jwt()
            # 假设管理员角色名为 'admin'，如果用 'maintainer' 请修改
            if claims.get("role") != "admin":
                # 使用 api_response 返回错误
                return api_response(code=403, message="需要管理员权限")
            else:
                return fn(*args, **kwargs)
        except Exception as e:
            # 处理可能的 JWT 验证异常
            return api_response(code=401, message=f"JWT 验证失败: {str(e)}")

    return wrapper